package com.gm.wj.controller;

import com.gm.wj.entity.*;
import com.gm.wj.result.Result;
import com.gm.wj.result.ResultFactory;
import com.gm.wj.service.*;
import com.gm.wj.util.SysLoging;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * User controller.
 *
 * @author Evan
 * @date 2019/11
 */
@Api(tags = "用户管理相关接口")
@Slf4j
@RestController
public class UserController {
    @Autowired
    UserService userService;
    @Autowired
    AdminUserRoleService adminUserRoleService;

    // 查询用户列表
    @SysLoging("查询用户列表")
    @ApiOperation("查询用户列表的接口")
    @GetMapping("/api/admin/user")
    public Result listUsers() {
        return ResultFactory.buildSuccessResult("查询成功",userService.list());
    }

    // 查询个人用户列表
    @SysLoging("查询个人用户列表")
    @ApiOperation("查询个人用户列表的接口")
    @GetMapping("/api/admin/usersByUsername")
    public Result usersByUsername() {
        return ResultFactory.buildSuccessResult("查询成功",userService.usersByUsername());
    }

    // 根据条件查询用户列表
    @SysLoging("根据条件查询用户列表")
    @ApiOperation("根据条件查询用户列表的接口")
    @PostMapping("/api/admin/user/findByQueryKey")
    public Result listUsersByQueryKey(String queryKey1,String queryKey2, String queryKey3) {
        return ResultFactory.buildSuccessResult("查询成功",userService.listUsersByQueryKey(queryKey1,queryKey2,queryKey3));
    }

    // 更新用户状态
    @SysLoging("更新用户状态")
    @ApiOperation("更新用户状态的接口")
    @PutMapping("/api/admin/user/status")
    public Result updateUserStatus(@RequestBody @Valid User requestUser) {
        userService.updateUserStatus(requestUser);
        return ResultFactory.buildSuccessResult("用户状态更新成功",null);
    }

    // 重置密码 固定重置为 0774123
    @SysLoging("重置密码")
    @ApiOperation("重置密码的接口")
    @PutMapping("/api/admin/user/password")
    public Result resetPassword(@RequestBody @Valid User requestUser) {
        userService.resetPassword(requestUser);
        return ResultFactory.buildSuccessResult("重置密码成功",null);
    }

    // 修改用户信息
    @SysLoging("修改用户信息")
    @ApiOperation("修改用户信息的接口")
    @PutMapping("/api/admin/user")
    public Result editUser(@RequestBody @Valid User requestUser) {
        userService.editUser(requestUser);
        return ResultFactory.buildSuccessResult("修改用户信息成功",null);
    }

    // 删除用户
    @SysLoging("删除用户")
    @ApiOperation("删除用户的接口")
    @PostMapping("/api/admin/user/del")
    public Result deleteUser(int id) {
        userService.deleteById(id);
        return ResultFactory.buildSuccessResult("删除成功",null);
    }

}
